#include "bsp_tim.h"

void BSP_TIM1TIM6_PWMADC_Init(void)
{
    HAL_TIM_Base_Start(&htim1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
    HAL_TIM_Base_Start(&htim6);
}

void BSP_FOCPWM_Start(void)
{
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
    HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
}

void BSP_TIM2_RGB_Send(uint32_t* buff, uint16_t Num)
{
    HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, buff, Num);  // 启动 PWM 输出
}

void BSP_TIM3_HallIRQ_Init(void)
{
    // 霍尔编码器
    HAL_TIM_Base_Start_IT(&htim3);          // 开启周期中断
    HAL_TIMEx_HallSensor_Start_IT(&htim3);  // 开启霍尔中断
}

void BSP_TIM4_IRQ_Init(void)
{
    HAL_TIM_Base_Start_IT(&htim4);
}

void BSP_TIM5_IRQ_Init(void)
{
    HAL_TIM_Base_Start_IT(&htim5);
}

__weak void USER_TIM3_Callback(void) {}

__weak void USER_TIM4_Callback(void) {}

__weak void USER_TIM5_Callback(void) {}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef* htim)
{
    if(htim->Instance == TIM3)
    {
        USER_TIM3_Callback();
    }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
{
    if(htim->Instance == TIM4)
    {
        USER_TIM4_Callback();
    }
    if(htim->Instance == TIM5)
    {
        USER_TIM5_Callback();
    }
}
